package qiyu.live.living.provider.service;

import org.qiyu.live.common.interfaces.vo.PageWrapper;
import org.qiyu.live.im.core.server.dto.ImOfflineDTO;
import org.qiyu.live.im.core.server.dto.ImOnlineDTO;
import qiyu.live.living.dto.req.LivingRoomReqDTO;
import qiyu.live.living.dto.req.OnlinePkReqDTO;
import qiyu.live.living.dto.resp.LivingRoomRespDTO;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: sfx
 * Date: 2023-10-24
 * Time: 19:57
 */
public interface ILivingRoomService {

    /**
     * 开启直播
     *
     * @param livingRoomReqDTO 直播类型
     * @return 返回插入成功的行数
     */
    Integer startLivingRoom(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 关闭直播
     *
     * @param livingRoomReqDTO 直播间dto
     * @return 返回是否成功关播
     */
    boolean closeLivingRoom(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 返回直播间列表
     *
     * @param livingRoomReqDTO dto
     * @return 返回直播间列表
     */
    PageWrapper<LivingRoomRespDTO> list(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 根据直播间id查询直播间信息
     *
     * @param roomId roomId
     * @return 返回直播间列表
     */
    LivingRoomRespDTO queryByRoomId(Integer roomId);

    /**
     * 根据直播间类型查询所有的直播间-直播列表
     *
     * @param type type
     * @return 返回直播间列表
     */
    List<LivingRoomRespDTO> queryAllLivingRoom(Integer type);


    /**
     * 用户上线处理, 将userId放入key为当前userId所在的roomId的set集合中
     *
     * @param imOnlineDTO 用户在线对象
     */
    void userOnlineHandler(ImOnlineDTO imOnlineDTO);

    /**
     * 用户下线处理,将userId从key为当前userId所在的roomId的set集合中移除
     *
     * @param imOfflineDTO 用户下线对象
     */
    void userOffLineHandler(ImOfflineDTO imOfflineDTO);


    /**
     * 根据roomId批量的查询出userId-->查询出当前直播在线的userId
     *
     * @param livingRoomReqDTO 在线pkDTO
     * @return 返回批量userId
     */
    List<Long> queryUserIdsByRoomId(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 直播pk接口,用户连接上线
     *
     * @param onlinePkReqDTO 在线pkDTO
     */
    boolean onlinePk(OnlinePkReqDTO onlinePkReqDTO);

    /**
     * 用户连接下线
     *
     * @param onlinePkReqDTO 在线pkDTO
     */
    boolean offlinePk(OnlinePkReqDTO onlinePkReqDTO);

    /**
     * 直播pk接口
     *
     * @param roomId 直播间id
     */
    Long queryOnlinePkObjId(Integer roomId);
}